package Chat.System;

import java.io.*;
import java.net.*;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JProgressBar;

/**
 * Gestion de la réception d'un fichier au niveau du client
 *
 * @author Ndanja & Papa Abdou
 */
public class ReceptionFile extends Thread {

    private Socket socketclient;
    private DataInputStream dataInput;
    private FileOutputStream fOutput;
    private File fichier;
    private JProgressBar progress;
    private int total, nb_octets;

    /**
     *
     * @param adresse: Adresse du serveur
     * @param port: port du serveur
     * @param fileReceivePath: Arborescence de stockage du fichier
     * @param taille: taille du fichier
     */
    public ReceptionFile(String adresse, int port, String fileReceivePath, int taille) {

        nb_octets = 0;
        total = 0;
        progress = new JProgressBar();
        progress.setMaximum(taille);
        progress.setMinimum(0);
        progress.setValue(0);

        try {

            socketclient = new Socket(adresse, port);

        } catch (UnknownHostException ex) {
        } catch (IOException ex) {
            Logger.getLogger(ReceptionFile.class.getName()).log(Level.SEVERE, null, ex);
        }

        fichier = new File(fileReceivePath);
        start();
    }

    /**
     * Retourne la référence de la barre de progression
     * @return JProgressBar
     */
    public JProgressBar getProgressBar() {
        return this.progress;
    }

    /**
     * Lecture des flux sur le serveur
     */
    public void initReception() {

        try {

            dataInput = new DataInputStream(socketclient.getInputStream());
            fOutput = new FileOutputStream(fichier);

            while ((nb_octets = dataInput.read()) != -1) {

                total = total + nb_octets;
                fOutput.write(nb_octets);
                progress.setValue(total);

            }

        } catch (IOException ex) {
            System.out.println("I/O Error");
        }


    }

    /**
     * Lancement du thread propre à la réception pour permettre des receptions en parallèle
     */
    @Override
    public void run() {
        initReception();
    }
}

